package org.example.demo.config;


import org.example.demo.ResponseHttps.ResponseData;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

// 使用 @RestControllerAdvice 注解的类可以作为全局异常处理器
// 在整个 Spring 应用中，可以集中处理所有的异常
@RestControllerAdvice
public class GlobalExceptionHandler {

    /**
     * 当捕获到 NullPointerException 时，会调用这个方法
     * @param exception 传入的异常对象，可以获取具体的异常信息
     * @return 一个标准的响应数据结构，这里返回状态码为500，错误信息为"空指针异常"
     */
    @ExceptionHandler(NullPointerException.class)
    public ResponseData exception(NullPointerException exception) {
        // 响应给前端的数据，包含状态码、错误信息、成功标志、错误详情
        return new ResponseData("500", "空指针异常", false, null);
    }

    /**
     * 当捕获到 IndexOutOfBoundsException 时，会调用这个方法
     * @param exception 传入的异常对象，可以获取具体的异常信息
     * @return 一个标准的响应数据结构，这里返回状态码为500，错误信息为"数组越界异常"
     */
    @ExceptionHandler(IndexOutOfBoundsException.class)
    public ResponseData exception(IndexOutOfBoundsException exception) {
        // 响应给前端的数据，包含状态码、错误信息、成功标志、错误详情
        return new ResponseData("500", "数组越界异常", false, null);
    }

    /**
     * 当捕获到其他类型异常时，会调用这个方法
     * @param exception 传入的异常对象，可以获取具体的异常信息
     * @return 一个标准的响应数据结构，这里返回状态码为500，异常的原始消息
     */
    @ExceptionHandler(Exception.class)
    public ResponseData exception(Exception exception) {
        // 响应给前端的数据，包含状态码、错误信息、成功标志、错误详情
        return new ResponseData("500", exception.getMessage(), false, null);
    }
}